          SUBROUTINE (SD,ED,BRCHS,BANK.ID,START.CHECK.NO,SORT.OPT,DOC.ID,FITEM,EFTCHK.NO,EFT.VEN,CHKDT,ZERO.CHK)
** Version# 42.0001 - 01/18/2017 - 03:41pm - TSMITH - eclipse
*** V42.0001 Change - Custom Coding 471 - 01/18/2017 - TSMITH - eclipse
** Copied from BP CD.REP.CHECK.PREVIEW Version# 42 - 09/09/2008 - 12:24pm - KRIVERA - main

*** SUBROUTINE: CD.REP.CHECK.PREVIEW
*-------------------------------------------------------------------------*
** EJO - 06/29/2000 - A/P Check preview report
*-------------------------------------------------------------------------*
** Parameters:
**  SD             - Pay On Start Date. Only payables with a Pay On
***                  date on or after this date will be included.     [IN]
**  ED             - Pay On End Date. Only payables with a Pay On
***                  date on or before this date will be included.    [IN]
**  BRCHS          - Payable Branches. Only payables made at the
***                  selected Branches will be included.              [IN]
**  BANK.ID        - Bank Account#                                    [IN]
**  START.CHECK.NO - Starting Check#                                  [IN]
**  SORT.OPT       - Added for Java entry into this program. Not a
**                   required Input for Eclipse.                      (IN)
**  DOC.ID         - Added for Java use.  This is allows Solar
**                   to open this doc for viewing.  The user is       (IN)
**                   prompted in Solar if they wish to delete.
**  FITEM          - Additional Select criterial.                     (IN)
*** EFTCHK.NO      - Starting EFT Check Number                        (IN)
*** EFT.VEN        - Indicates if the user wants to Exclude, Include  (IN)
***                - or Only run the check print for EFT Vendors.
***                - This will pass Exclude, Include or Only
*** CHKDT          - The check post date                              (IN)
*** ZERO.CHK       - Zero Check Printing Prompt                       [IN]
*-------------------------------------------------------------------------*
*** This is a java friendly subroutine. Please forward Solar group when
*** any parameter changes are made.
*-------------------------------------------------------------------------*
*** WITH SHIP FROM SUB TOTALS ***

          IF FITEM = '' THEN FILTER.FLAG = NO ELSE FILTER.FLAG = YES
*-------------------------------------------------------------------------*
*** Determine whether to sort by Vendor, Ship From or Invoice Date &
*** Amount...

          SORT.OPTS      = 'By Vendor By Invoice'
          SORT.OPTS<1,2> = 'By Ship From By Invoice'
          SORT.OPTS<1,3> = 'By Invoice Date By Invoice Amount'
          SORT.OPTS<1,4> = 'By Vendor By Branch By Invoice'
          IF NOT(JAVA.PROC$) THEN
             SORT.OPT = SORT.OPTS<1,1>
             TITLE = 'Sort Selection'
             MENU.TABLE SORT.OPT,10,5,1,4,33,,,SORT.OPTS,TITLE
          END
          IF F12 THEN RETURN
          *** If user hits escape, then SORT.OPT gets nulled.
          IF NOT(SORT.OPT) THEN SORT.OPT = SORT.OPTS<1,1>
          LOCATE SORT.OPT IN SORT.OPTS<1> SETTING SORTPOS ELSE SORTPOS = 1
          IF SORTPOS = 2 THEN SHIPSORT = 1 ELSE SHIPSORT = ''
*-------------------------------------------------------------------------*

          VP = 'V'
          IF NOT(JAVA.PROC$) THEN
IN$$2:       INP.PROMPT VP,'<V>iew or <P>rint : ',,1,'D:V':VM:'P'
             IF F12 THEN RETURN
             WINDOW ,,40,3,3
             COMPILE.MSG = 'Compiling Report.... Please Wait... '
             PRINT @(0,1):BLINK$:COMPILE.MSG:NORM$
          END

          BRS      = BRCHS
          CHECK.NO = START.CHECK.NO
          ECHK.NO  = EFTCHK.NO

          * Define the control rec where the next check number is stored
          CTRL.REC = 'NEXT.EFT.ZERO.CHK.NO:'
          * Call on routine to get the next check number from control rec
          CHK.GET.NEXT.ID BANK.ID,ZCHK.NO,CTRL.REC,'Z'

          CONVERT VM TO ',' IN BRS
          XRATE    = ''

          * Get list of payables in the start and end date
          * PAY.IDS will be an VM list of payables AM delim per check
          CD.GET.PAYABLE.IDS BRCHS,CHKDT,SD,ED,IDS,FITEM,EFT.VEN,ERR.MSG,ZERO.CHK

          HDG  = 'Check Preview Report for ':OCONV(SD,'D4/'):' to '
          HDG := OCONV(ED,'D4/')

          HDG<1,2> = 'Branches : ':BRS:'  Sort: ':SORT.OPT

          HDG<1,3> = 'Check#.. Vendor Name..............  '

          * If we're sorting by 'Ship From'...
          IF SHIPSORT THEN
             HDG<1,3> := 'Ship Name...............  '
          END
          * If we are creating subvalues by branch add Branch column
          IF SORTPOS = 4 THEN
             HDG<1,3> := 'Branch....  '
          END
          HDG<1,3> := 'Invoice #...........  Inv Date  Apprv Amt.  '
          HDG<1,3> := 'Deduct Amt  Disc Amt..  PayOn...  DiscDate  '
          HDG<1,3> := 'Amt to Pay'

          BR.LIST        = ""
          BRGTOL.APPR    = ""
          BRGTOL.DEDUCT  = ""
          BRGTOL.DISC    = ""

          GTOL.APPR    = 0
          GTOL.DEDUCT  = 0
          GTOL.DISC    = 0

          LAST.VEN     = '@@'

          WDTH      = LEN(HDG<1,3>)
          HDG1.WDTH = LEN(HDG<1,1>)
          * Tack the page number onto the first line of our heading...
          HDG<1,1> := SPACE(WDTH - HDG1.WDTH - 13):'Page : ^#####'

          PRINTER.ON WDTH,'Check Preview',DOC.ID,HDG
          CHK.CT     = DCOUNT(IDS,AM)
          FOR CHK    = 1 TO CHK.CT
             PAY.IDS = IDS<CHK>
             GOSUB PRINT.ONE
          NEXT CHK

          GOSUB PRT.GTOTALS

          ERR.CT = DCOUNT(ERR.MSG,AM)
          FOR ET = 1 TO ERR.CT
             IF ET = 1 THEN
                PRINT
                PRINT 'Errors Encountered: '
             END
             PRINT SPACE(20):"***  ":ERR.MSG<ET>:" ***"
             PRINT
          NEXT ET

          IF VP = 'V' THEN LOCA = 'HOLD' ELSE LOCA = LOCATION

          PRINTER.OFF DOC.ID,LOCA

          IF NOT(JAVA.PROC$) THEN
             WINDOW.CLOSE
             IF ERR.MSG THEN
                WINDOW ,,50,3,3
                PRINT "Multiple currencies found for certain vendors."
                PRINT "Their checks will not print!"
                PRINT "Press <Enter> to continue":
IN$$1:          INPNO A,27,3,0
                WINDOW.CLOSE
             END
          END

          * If this is a java proc, simply hold the file.  Don't delete
          * it or view it.
          IF VP = 'V' THEN
             IF NOT(JAVA.PROC$) THEN
                VIEW.PRINT DOC.ID
                SPOOLER.DELETE DOC.ID
             END
          END

          GOTO FINISH
*-------------------------------------------------------------------------*
PRINT.ONE:*
          SORT.INVS = ''
          SORT.IDS  = ''
          EFT.STP   = ''  ;* Fl to indicate Pay-to is setup for EFT
          PRE       = ''  ;* Prefix, 'E' for EFT checks
          CURR.TYP  = ''
          CHK.AMT   = 0
          OCHK.AMT  = 0
          PAY.CT    = DCOUNT(PAY.IDS,VM)
          OLD.BR    = ''
          BR.CT     = 1
          FOR J     = 1 TO PAY.CT
             ID     = PAY.IDS<1,J>
             OID    = FIELD(ID,'.',3)
             INVN   = FIELD(ID,'.',4)+0
             PAY.DT = FIELD(ID,'.',5)
             AR.ID  = OID:'.':INVN"R%3"
             AR.MATREAD AR.ID,ASUB.ID
             BRVAL = AR(14)
             LOCATE PAY.DT IN AR(22)<1> SETTING POS THEN
                CHK.AMT   += AR(21)<1,1,POS>
                ORIG.AMTS  = RAISE(AR(33)<1,1>)
                OCHK.AMT  += ORIG.AMTS<1,1,POS>
             END
             * If we're sorting 'By Invoice Date By Invoice Amount'...
             IF SORTPOS = 3 THEN
                MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
                LOCATE INVN IN LED(8)<1> SETTING GEN ELSE CONTINUE
                * AP Invoice Date...
                INV.DATE  = LED(10)<1,GEN>
                IF LED(92)<1,GEN,2> THEN
                   XRATE = OCONV(LED(92)<1,GEN,2>,'MR4')
                END ELSE
                   XRATE = 1
                END

                * Pay Amount...
                PAMT       = ICONV(AR(21)<1,1,POS>/XRATE,'MR0')
                * Discount Amount...
                DAMT       = ICONV(AR(21)<1,2,POS>/XRATE,'MR0')
                * Deduction Amount...
                DEDUCT.AMT = ICONV(AR(21)<1,3,POS>/XRATE,'MR0')
                * Invoice Amount...
                IAMT       = PAMT + DEDUCT.AMT + DAMT
             END

* Sort Payables by Ship from by Invoice #'s OR by Invoice #'s OR by
* Invoice Date by Invoice Amount...

             READV INV.NO FROM LEDFILE,OID,13 ELSE INV.NO = ''

             IF SHIPSORT THEN
                READV SHIPFROM FROM LEDFILE,OID,5 ELSE SHIPFROM   = ''
                READV NAME FROM CUSFILE,SHIPFROM<1,1>,1 ELSE NAME = ''
                SORT.ID = NAME "L#35":INV.NO
             END ELSE
                * If we're sorting 'By Invoice Date By Invoice Amount'...
                BEGIN CASE
                CASE SORTPOS = 3
                   SORT.ID = INV.DATE "R%5":IAMT "R%12"
                CASE SORTPOS = 4
                   SORT.ID = BRVAL:'~':INV.NO
                CASE OTHERWISE
                   SORT.ID = INV.NO
                END CASE
             END

             LOCATE SORT.ID IN SORT.INVS<1> BY 'AL' SETTING POS ELSE NULL
             SORT.INVS = INSERT(SORT.INVS,1,POS;SORT.ID)
             SORT.IDS  = INSERT(SORT.IDS,1,POS;ID)
          NEXT J

          PAY.IDS      = SORT.IDS
          TOL.APPR     = 0
          TOL.DEDUCT   = 0
          TOL.DISC     = 0

          CTOL.APPR    = 0
          CTOL.DEDUCT  = 0
          CTOL.DISC    = 0

          PREV.CUS = '@@@'
          LSW      = NO

          FIRST.LN      = YES
          FIRST.CUST.LN = YES
          FIRSTBR       = YES

          ID.CT   = DCOUNT(PAY.IDS,VM)
          FOR IDN = 1 TO ID.CT
             ID     = PAY.IDS<1,IDN>
             OID    = FIELD(ID,'.',3)
             INVN   = FIELD(ID,'.',4)+0
             PAY.DT = FIELD(ID,'.',5)
             MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
             LOCATE INVN IN LED(8)<1> SETTING GEN ELSE CONTINUE
             IF LED(92)<1,GEN,2> THEN
                XRATE = OCONV(LED(92)<1,GEN,2>,'MR4')
             END ELSE
                XRATE = 1
             END
             PAY.VENDOR = LED(1)<1,1>
             READV VNAME FROM CUSFILE,PAY.VENDOR,1 ELSE VNAME = ''
             * If Vendor is 'generic' and there is an overridden vendor
             * name on the payable ledger record then use it.
             READV GEN.VDR.INFO FROM CUSFILE,PAY.VENDOR,159 ELSE GEN.VDR.INFO = ""
             IF GEN.VDR.INFO<1,2> # "" THEN
                IF LED(78)<1,1> # "" THEN
                   VNAME = "*":LED(78)<1,1>
                END
             END

             * Set EFT.STP flag if the pay-to vendor is set up for
             * EFT payments.
             READV EFT.SET FROM CUSFILE,PAY.VENDOR,171 ELSE EFT.SET = ''
             IF EFT.SET<1,1> THEN
                * If the check run is excluding EFT checks, then do not
                * include this check, check next one
                EFT.STP = 1
                PRE     = 'E'
             END

             AR.ID = OID:'.':INVN"R%3"
             AR.MATREAD AR.ID,ASUB.ID
             ORIG.AMTS = RAISE(AR(33)<1,1>)

             * Get the discount amount
             AP.GET.PAY.AMTS AR.ID,PAY.DT,CHKDT,PAY.AMT,DISC.AMT,DEDUCT,,YES
             INV.AMT = PAY.AMT + DEDUCT + DISC.AMT

             * If payment amount is zero and Zero Check is Clear then
             * Print Z check.  If EFT print E check otherwise normal
             BEGIN CASE
             CASE CHK.AMT   = 0 AND ZERO.CHK = 'C'
                DCHK.NO     = 'Z':ZCHK.NO           "R%7"
             CASE EFT.STP
                DCHK.NO     = 'E':ECHK.NO           "R%7"
             CASE NUM(CHECK.NO)
                DCHK.NO     = CHECK.NO              "R%8"
             CASE OTHERWISE
                DCHK.NO     = CHECK.NO              "R#8"
             END CASE

             * SHIPSORT Logic
             IF SHIPSORT THEN
                NEXT.CUS = SORT.INVS<1,IDN>[1,35]
                IF PREV.CUS # NEXT.CUS THEN
                   IF PREV.CUS # '@@@' THEN
                      CTOL  = CTOL.APPR - CTOL.DISC - CTOL.DEDUCT
                      PRINT '' "L#56" : STR('*',5):' ':PREV.CUS"L#30":
                      PRINT CTOL.APPR    "R26#12":
                      PRINT CTOL.DEDUCT  "R26#12":
                      PRINT CTOL.DISC    "R26#12":
                      PRINT ""           "L#20":
                      PRINT CTOL         "R26#12"
                      LSW = YES
                   END
                   CTOL.APPR     = 0
                   CTOL.DEDUCT   = 0
                   CTOL.DISC     = 0

                   OCTOL.APPR    = 0
                   OCTOL.DEDUCT  = 0
                   OCTOL.DISC    = 0

                   PREV.CUS      = NEXT.CUS
                   FIRST.CUST.LN = YES
                END
             END
             * End SHIPSORT Logic

             IF SORTPOS = 4 THEN
               IF LED(2)<1,GEN,1> # OLD.BR THEN
                 IF NOT(FIRSTBR) THEN
                   PRINT
                   IF BR.CT > 1 THEN GOSUB PRT.BTOTALS
                 END
               END
             END

             IF FIRST.LN THEN
                PRINT DCHK.NO                             :' ':
                PRINT VNAME                         "L#25":'  ':
                FIRST.LN = NO
             END ELSE
                PRINT SPACE(36):
             END

             * Print branch number and resets branch subtotals
             IF SORTPOS = 4 THEN
                IF LED(2)<1,GEN,1> = OLD.BR THEN
                  PRINT ' ' "L#12":
                  BR.CT = BR.CT + 1
                END ELSE
                  PRINT LED(2)<1,GEN,1>"L#10":'  ':
                  OLD.BR = LED(2)<1,GEN,1>
                  BTOL.APPR     = 0
                  BTOL.DEDUCT   = 0
                  BTOL.DISC     = 0

                  BOTOL.APPR    = 0
                  BOTOL.DEDUCT  = 0
                  BOTOL.DISC    = 0
                  FIRSTBR = NO
                END
             END

             * SHIPSORT Logic
             IF SHIPSORT THEN
                IF FIRST.CUST.LN THEN
                   PRINT NEXT.CUS                    "L#24":'  ':
                   FIRST.CUST.LN = NO
                END ELSE
                   PRINT SPACE(26):
                END
             END
             * End SHIPSORT Logic

             PRINT LED(13)<1,GEN>                 "L#22":
             PRINT OCONV(LED(10)<1,GEN>,'D2/')    "L#8":
             PRINT INV.AMT                        "R26#12":
             PRINT DEDUCT                         "R26#12":
             PRINT DISC.AMT                       "R26#12":'  ':
             PRINT OCONV(PAY.DT,'D2/')            "L#10":
             PRINT OCONV(LED(20)<1,GEN>,'D2/')    "L#8":
             PRINT PAY.AMT                        "R26#12"

             * SHIPSORT Logic
             CTOL.APPR   += INV.AMT
             CTOL.DEDUCT += DEDUCT
             CTOL.DISC   += DISC.AMT
             * End SHIPSORT Logic

             TOL.APPR   += INV.AMT
             TOL.DEDUCT += DEDUCT
             TOL.DISC   += DISC.AMT

             * Calculate Branch subtotals
             IF SORTPOS = 4 THEN
               BTOL.APPR    += INV.AMT
               BTOL.DEDUCT  += DEDUCT
               BTOL.DISC    += DISC.AMT

               GL.BR = LED(2)<1,GEN,3>
               LOCATE GL.BR IN BR.LIST<1> BY 'AL' SETTING BRPOS THEN
                  BRGTOL.APPR<1,BRPOS>   += INV.AMT
                  BRGTOL.DEDUCT<1,BRPOS> += DEDUCT
                  BRGTOL.DISC<1,BRPOS>   += DISC.AMT
               END ELSE
                  BR.LIST = INSERT(BR.LIST,1,BRPOS;LED(2)<1,GEN,1>)
                  BRGTOL.APPR = INSERT(BRGTOL.APPR,1,BRPOS;INV.AMT)
                  BRGTOL.DEDUCT = INSERT(BRGTOL.DEDUCT,1,BRPOS;DEDUCT)
                  BRGTOL.DISC = INSERT(BRGTOL.DISC,1,BRPOS;DISC.AMT)
               END
             END
          NEXT IDN

          * Before Vendor totals are Printed, print results of last branch
          IF SORTPOS = 4 AND BR.CT > 1 THEN GOSUB PRT.BTOTALS

          * SHIPSORT Logic
          IF SHIPSORT THEN
             IF LSW THEN
                CTOL = CTOL.APPR - CTOL.DISC - CTOL.DEDUCT
                PRINT '' "L#56" : STR('*',5):' ':NEXT.CUS"L#30":
                PRINT CTOL.APPR   "R26#12":
                PRINT CTOL.DEDUCT "R26#12":
                PRINT CTOL.DISC   "R26#12":
                PRINT ""         "L#20":
                PRINT CTOL        "R26#12"
             END
          END
          * End SHIPSORT Logic

          TOL = TOL.APPR - TOL.DISC - TOL.DEDUCT

          * If sorting by branch then change where check total prints
          IF SHIPSORT THEN
             PRINT SPACE(72):'Check # ':DCHK.NO:' ---':
          END ELSE
             IF SORTPOS = 4 THEN
                PRINT SPACE(40):'Check # ':DCHK.NO:' ':STR('-',21):
             END ELSE
                PRINT SPACE(46):'CHECK # ':DCHK.NO:' ---':
             END
          END

          PRINT TOL.APPR    "R26#12":
          PRINT TOL.DEDUCT  "R26#12":
          PRINT TOL.DISC    "R26#12":
          PRINT ""          "L#20":
          PRINT TOL         "R26#12"
          PRINT

          GTOL.APPR    += TOL.APPR
          GTOL.DEDUCT  += TOL.DEDUCT
          GTOL.DISC    += TOL.DISC

          LOOP
             IF CHK.AMT = 0 AND ZERO.CHK = 'C' THEN
                * If payment amount is zero and Zero Check is Clear
                * set to Z Check.
                ZCHK.NO += 1
                CHK.TST   = ZCHK.NO
                PRE = 'Z'
             END ELSE
                IF EFT.STP THEN
                   ECHK.NO  += 1
                   CHK.TST   = ECHK.NO
                   PRE = 'E'
                END ELSE
                   CHECK.NO += 1
                   CHK.TST   = CHECK.NO
                   PRE = ''
                END
             END
             READ TEST FROM CHKXFILE,BANK.ID:'~':PRE:CHK.TST ELSE EXIT
          REPEAT
          RETURN
*-------------------------------------------------------------------------*
PRT.BTOTALS: * Prints the Subtotals for each branch for a Vendor
          BTOL  = BTOL.APPR - BTOL.DISC - BTOL.DEDUCT
          BLNGTH = LEN(OLD.BR)
          BLINE = SPACE(43):'Subtotal for Branch ':OLD.BR:' '
          BLINE := STR('-',(14 - BLNGTH))
          PRINT SPACE(80):STR('-',10):'  ':STR('-',10):'  ':STR('-',10):SPACE(22):STR('-',10)
          PRINT BLINE "L#78":
          PRINT BTOL.APPR    "R26#12":
          PRINT BTOL.DEDUCT  "R26#12":
          PRINT BTOL.DISC    "R26#12":
          PRINT ""           "L#20":
          PRINT BTOL         "R26#12"
          BR.CT = 1
          PRINT
          RETURN
*-------------------------------------------------------------------------*
PRT.GTOTALS: *
          *** Print totals for each branch
          IF SORTPOS = 4 THEN
            BR.COUNT = DCOUNT(BR.LIST,VM)
            FOR XX = 1 TO BR.COUNT
               BLNGTH = LEN(BR.LIST<1,XX>)
               PRT.STR = SPACE(49):'Total for Branch ':BR.LIST<1,XX>:' '
               PRT.STR := STR('-',(11 - BLNGTH))
               PRINT PRT.STR:
               PRINT BRGTOL.APPR<1,XX>   "R26#12":
               PRINT BRGTOL.DEDUCT<1,XX> "R26#12":
               PRINT BRGTOL.DISC<1,XX>   "R26#12":
               PRINT ""          "L#20":
               BRGTOL = BRGTOL.APPR<1,XX> - BRGTOL.DEDUCT<1,XX> - BRGTOL.DISC<1,XX>
               PRINT BRGTOL         "R26#12"
            NEXT XX
            PRINT SPACE(80):STR('-',10):'  ':STR('-',10):'  ':STR('-',10):SPACE(22):STR('-',10)
          END

          IF SHIPSORT THEN
             PRINT SPACE(76):'Grand Total --- ':
          END ELSE
             IF SORTPOS = 4 THEN
               PRINT SPACE(62):'Grand Total --- ':
             END ELSE
               PRINT SPACE(50):'Grand Total --- ':
             END
          END

          GTOL  = GTOL.APPR - GTOL.DEDUCT - GTOL.DISC
          PRINT GTOL.APPR    "R26#12":
          PRINT GTOL.DEDUCT  "R26#12":
          PRINT GTOL.DISC    "R26#12":
          PRINT ''           "L#20":
          PRINT GTOL         "R26#12"
          RETURN
*-------------------------------------------------------------------------*
FINISH:   RETURN
*-------------------------------------------------------------------------*
!TSMITH~01/18/17~15:41
